public class Test02 {
    public void duplicateZeros(int[] arr) {
        //先找到最后一个复写数
        int cur = 0, dest = -1, n = arr.length;
        while (cur < n) {
            if (arr[cur] == 0) {
                dest += 2;
            } else {
                dest += 1;
            }
            if (dest >= n - 1) {
                break;
            }
            cur++;
        }
        System.out.println("最后一个复写数："+arr[cur]+"，它的下标："+cur);
        System.out.println("dest的位置"+dest);

        //开始从后往前“就地”复写操作
        //考虑特殊情况dest越界
        if (dest > n-1) {
            //当dest越界时，它一定只会越界一位,并且cur当前绝对指向的是0
            //当cur==0时，dest要进行复写两次0，但dest已经越界，所以只让最后一位变为0
            arr[n-1] = 0;
            dest -= 2;
            cur--;
        }
        //复写操作
        while (cur >= 0) {
            //当cur==0时，dest要进行复写两次0
            if (arr[cur] == 0) {
                arr[dest] = 0;
                dest--;
                arr[dest] = 0;
            } else {
                arr[dest] = arr[cur];
            }
            cur--;
            dest--;
        }
    }
}
